package aceim.app.dataentity;
import aceim.api.utils.Logger;
import aceim.app.AceImException;
import aceim.app.AceImException.AceImExceptionReason;
import aceim.app.MainActivity;
import aceim.app.R;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.os.Parcel;
import android.os.Parcelable;
public class SmileyResources extends PluginResources {
private final String smileyPackShortName;
/**
* @return the smileyPackShortName
*/
public String getSmileyPackShortName() {
return smileyPackShortName;
}
private final String[] names;
private final int[] drawableIDs;
private SmileyResources(String packageName, String[] names, int[] drawableIDs, String pluginName, String smileyPackShortName, Resources resources) {
super(packageName, resources);
this.names = names;
this.drawableIDs = drawableIDs;
this.smileyPackShortName = smileyPackShortName;
setPluginName(pluginName);
}
public SmileyResources(Parcel in) {
super(in);
names = in.createStringArray();
drawableIDs = in.createIntArray();
smileyPackShortName = in.readString();
}
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeStringArray(names);
out.writeIntArray(drawableIDs);
out.writeString(smileyPackShortName);
}
public static final Parcelable.Creator<SmileyResources> CREATOR = new Parcelable.Creator<SmileyResources>() {
public SmileyResources createFromParcel(Parcel in) {
in.readString();
return new SmileyResources(in);
}
public SmileyResources[] newArray(int size) {
return new SmileyResources[size];
}
};
public static SmileyResources mySmileys(MainActivity activity) {
Resources r = activity.getResources();
String[] names = r.getStringArray(R.array.smiley_names);
int[] values = getValuesInternal(r, R.array.smiley_values);
String smileyPackShortName = r.getString(R.string.smileys);
String pluginName = r.getString(activity.getApplicationInfo().labelRes);
return new SmileyResources(activity.getPackageName(), names, values, pluginName, smileyPackShortName, r);
}
public static SmileyResources fromPackageName(String packageName, Context context) {
PackageManager pm = context.getPackageManager();
try {
Resources r = pm.getResourcesForApplication(packageName);
int namesId = r.getIdentifier("smiley_names", "array", packageName);
int valuesId = r.getIdentifier("smiley_values", "array", packageName);
int shortNameId = r.getIdentifier("short_name", "string", packageName);
if (namesId == 0 || valuesId == 0) {
throw new AceImException(packageName, AceImExceptionReason.RESOURCE_NOT_INITIALIZED);
}
String[] names = r.getStringArray(namesId);
int[] values = getValuesInternal(r, valuesId);
String pluginName = r.getString(context.getPackageManager().getApplicationInfo(packageName, 0).labelRes);
String smileyShortName = r.getString(shortNameId);
return new SmileyResources(packageName, names, values, pluginName, smileyShortName, r);
} catch (Exception e) {
Logger.log(e);
}
return null;
}
private static int[] getValuesInternal(Resources r, int arrayId){
TypedArray a = r.obtainTypedArray(arrayId);
int[] values = new int[a.length()];
for (int i=0; i<a.length(); i++) {
int id = a.getResourceId(i, R.drawable.logo_corner_small);
values[i] = id;
}
a.recycle();
return values;
}
/**
* @return the names
*/
public String[] getNames() {
return names;
}
/**
* @return the drawableIDs
*/
public int[] getDrawableIDs() {
return drawableIDs;
}
}